Scan the eigth cells surrounding the center cell (row,col) (neglecting the upstream cell (i,j) ) to find if a confluence is present. The confluence cell must be of the same order or not yet defined.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | row | |||
integer, | intent(in) | :: | col | |||
integer, | intent(in) | :: | i | |||
integer, | intent(in) | :: | j | |||
type(grid_integer), | intent(in) | :: | flowDir | |||
logical, | intent(out) | :: | confluence | |||
type(grid_integer), | intent(in) | :: | orders | |||
integer, | intent(in) | :: | Norder |
SUBROUTINE ConfluenceIsAround & ! (row,col,i,j,flowDir,confluence,orders,Norder) IMPLICIT NONE TYPE (grid_integer), INTENT(IN):: flowDir TYPE (grid_integer), INTENT(IN):: orders INTEGER, INTENT(IN):: i,j,row,col,Norder LOGICAL, INTENT(OUT):: confluence !----------------------------------------------------------- IF(.NOT. IsOutOfGrid(row,col+1,flowDir) ) THEN IF(flowDir%mat(row,col+1) == W .AND.& (row /= i .OR. col+1 /= j).AND. & (orders%mat(row,col+1) == orders%nodata.OR. & orders%mat(row,col+1) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF IF(.NOT. IsOutOfGrid(row+1,col+1,flowDir) ) THEN IF(flowDir%mat(row+1,col+1) == NW .AND.& (row+1 /=i .OR. col+1 /= j).AND. & (orders%mat(row+1,col+1) == orders%nodata.OR. & orders%mat(row+1,col+1) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF IF(.NOT. IsOutOfGrid(row+1,col,flowDir) ) THEN IF(flowDir%mat(row+1,col) == N .AND.& (row+1 /=i .OR. col /= j).AND. & (orders%mat(row+1,col) == orders%nodata.OR. & orders%mat(row+1,col) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF IF(.NOT. IsOutOfGrid(row+1,col-1,flowDir) ) THEN IF(flowDir%mat(row+1,col-1) == NE .AND.& (row+1 /= i .OR. col-1 /= j).AND. & (orders%mat(row+1,col-1) == orders%nodata.OR. & orders%mat(row+1,col-1) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF IF(.NOT. IsOutOfGrid(row,col-1,flowDir) ) THEN IF(flowDir%mat(row,col-1) == E .AND.& (row /= i .OR. col-1 /= j).AND. & (orders%mat(row,col-1) == orders%nodata.OR. & orders%mat(row,col-1) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF IF(.NOT. IsOutOfGrid(row-1,col-1,flowDir) ) THEN IF(flowDir%mat(row-1,col-1) == SE .AND.& (row-1 /= i .OR. col-1 /= j).AND. & (orders%mat(row-1,col-1) == orders%nodata.OR. & orders%mat(row-1,col-1) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF IF(.NOT. IsOutOfGrid(row-1,col,flowDir) ) THEN IF(flowDir%mat(row-1,col) == S .AND.& (row-1 /= i .OR. col /= j).AND. & (orders%mat(row-1,col) == orders%nodata.OR. & orders%mat(row-1,col) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF IF(.NOT. IsOutOfGrid(row-1,col+1,flowDir) ) THEN IF(flowDir%mat(row-1,col+1) == SW .AND.& (row-1 /= i .OR. col+1 /= j).AND. & (orders%mat(row-1,col+1) == orders%nodata.OR. & orders%mat(row-1,col+1) == Norder) ) THEN confluence = .TRUE. ENDIF ENDIF RETURN END SUBROUTINE ConfluenceIsAround